<?php

function conectarMensajes() {
        session_start();
        
        try {
            
            include 'configBbdd.php';
            if ($conexion = mysql_connect($server, $usuario , $pass))
            mysql_set_charset('utf8');
            mysql_select_db($bbdd,$conexion);
        
            return $conexion;
        
        } catch (Exception $e) {
            return null;
        }
        
	//Seleccionar la BD a utilizar
	//or die (mysql_error());
}

function misMensajes($uid) {
    
    try {
        $sql = "SELECT mensajes.idUsuarioOrigen,
                       mensajes.idMensaje,
                       mensajes.asunto,
                       mensajes.idUsuarioDestino,
                       usuarios1.nombre as nombreUsuarioOrigen,
                       usuarios1.apellidos as apellidosUsuarioOrigen,
                       usuarios1.foto as fotoUsuarioOrigen,
                       usuarios2.nombre as nombreUsuarioDestino,
                       usuarios2.apellidos as apellidosUsuarioDestino,
                       usuarios2.foto as fotoUsuarioDestino,
                       mensajes.fecha,
                       mensajes.totalMensajes,
                       mensajes.mensajesSinLeerOrigen,
                       mensajes.mensajesSinLeerDestino,
                       mensajes.fechaModificacion
                FROM mensajes
                INNER JOIN usuarios as usuarios1 on usuarios1.idUsuario = mensajes.idUsuarioOrigen
                INNER JOIN usuarios as usuarios2 on usuarios2.idUsuario = mensajes.idUsuarioDestino
                WHERE usuarios1.baja = 0 and usuarios2.baja = 0 and mensajes.idUsuarioOrigen = ".$uid." OR mensajes.idUsuarioDestino = ".$uid.""
             ." ORDER BY fechaModificacion DESC";

        $result = mysql_query($sql, conectarMensajes()); 

        $i=0;
        while ($mensaje = mysql_fetch_array($result)) {
           $misMensajes[$i] = $mensaje;
           $i++;
        } 
        return $misMensajes;
    } catch (Exception $e) {
        echo 'ERROR! :'.$e;
    }
}


function misMensajesEnviados($uid) {
    
    try {
        $sql = "SELECT mensajes.idUsuarioOrigen,
                       mensajes.idMensaje,
                       mensajes.asunto,
                       mensajes.idUsuarioDestino,
                       usuarios1.nombre as nombreUsuarioOrigen,
                       usuarios1.apellidos as apellidosUsuarioOrigen,
                       usuarios1.foto as fotoUsuarioOrigen,
                       usuarios2.nombre as nombreUsuarioDestino,
                       usuarios2.apellidos as apellidosUsuarioDestino,
                       usuarios2.foto as fotoUsuarioDestino,
                       mensajes.fecha,
                       mensajes.totalMensajes,
                       mensajes.mensajesSinLeerOrigen,
                       mensajes.mensajesSinLeerDestino,
                       mensajes.fechaModificacion
                FROM mensajes
                INNER JOIN usuarios as usuarios1 on usuarios1.idUsuario = mensajes.idUsuarioOrigen
                INNER JOIN usuarios as usuarios2 on usuarios2.idUsuario = mensajes.idUsuarioDestino
                WHERE usuarios1.baja = 0 and usuarios2.baja = 0 and mensajes.idUsuarioOrigen = ".$uid
             ." ORDER BY fechaModificacion DESC";

        $result = mysql_query($sql, conectarMensajes()); 

        $i=0;
        while ($mensaje = mysql_fetch_array($result)) {
           $misMensajes[$i] = $mensaje;
           $i++;
        } 
        return $misMensajes;
    } catch (Exception $e) {
        echo 'ERROR! :'.$e;
    }
}


function misMensajesRecibidos($uid) {
    
    try {
        $sql = "SELECT mensajes.idUsuarioOrigen,
                       mensajes.idMensaje,
                       mensajes.asunto,
                       mensajes.idUsuarioDestino,
                       usuarios1.nombre as nombreUsuarioOrigen,
                       usuarios1.apellidos as apellidosUsuarioOrigen,
                       usuarios1.foto as fotoUsuarioOrigen,
                       usuarios2.nombre as nombreUsuarioDestino,
                       usuarios2.apellidos as apellidosUsuarioDestino,
                       usuarios2.foto as fotoUsuarioDestino,
                       mensajes.fecha,
                       mensajes.totalMensajes,
                       mensajes.mensajesSinLeerOrigen,
                       mensajes.mensajesSinLeerDestino,
                       mensajes.fechaModificacion
                FROM mensajes
                INNER JOIN usuarios as usuarios1 on usuarios1.idUsuario = mensajes.idUsuarioOrigen
                INNER JOIN usuarios as usuarios2 on usuarios2.idUsuario = mensajes.idUsuarioDestino
                WHERE usuarios1.baja = 0 and usuarios2.baja = 0 and mensajes.idUsuarioDestino = ".$uid
             ." ORDER BY fechaModificacion DESC";

        $result = mysql_query($sql, conectarMensajes()); 

        $i=0;
        while ($mensaje = mysql_fetch_array($result)) {
           $misMensajes[$i] = $mensaje;
           $i++;
        } 
        return $misMensajes;
    } catch (Exception $e) {
        echo 'ERROR! :'.$e;
    }
}



function miConversacion($mid, $uidO) {
    
    try {
        
        //Comenzamos la transacción
        $sql = "START TRANSACTION;";
        mysql_query($sql, conectarMensajes()); 
        
        //Mostramos los mensajes de la conversación, indicando cuál es el que no está leído.
        $sql = "SELECT idUsuarioOrigen,"
                . "    idUsuarioDestino,"
                . "    idMensaje,"
                . "    idcuerpoMensaje,"
                . "    cuerpo,"
                . "    fecha,"
                . "    CAST(`leido` AS UNSIGNED) as leido "
                . "FROM cuerposMensajes WHERE idMensaje = ".$mid." order by fecha desc";
        $result = mysql_query($sql, conectarMensajes()); 

        $i=0;
        while ($mensaje = mysql_fetch_array($result)) {
           $miConversacion[$i] = $mensaje;
           if ($mensaje['leido']==1 && $mensaje['idUsuarioDestino']==$uidO) {
               $miConversacion[$i]['nuevo'] = 'NUEVO';
           } else {
               $miConversacion[$i]['nuevo'] = '';
           }
           $i++;
        } 

        //actualizamos el bit "leído" de cuerposMensajes de los mensajes que lo tengan a 1, ya que entonces ya estarán leídos.
        $sql = "UPDATE cuerposMensajes SET leido = 0 "
                . "WHERE idMensaje = ".$mid." and idUsuarioDestino = ".$uidO;
        mysql_query($sql, conectarMensajes());

        //actualizamos la tabla mensajes indicando el nuevo número total de mensajes y mensajes no leídos
        $sql = "UPDATE mensajes 
                 SET mensajesSinLeerOrigen = IF (idUsuarioOrigen = ".$uidO.", null, mensajesSinLeerOrigen),
                     mensajesSinLeerDestino = IF (idUsuarioDestino = ".$uidO.", null,mensajesSinLeerDestino)
                 WHERE idMensaje = ".$mid;
        mysql_query($sql, conectarMensajes());

        //Finalizamos la transacción
        $sql = " COMMIT; ";
        $result = mysql_query($sql, conectarMensajes());

        if ($result) {
            
            //Devolvemos la conversación solicitada
            return $miConversacion;
        } else {
            
            //En caso de que haya algún error, deshacemos toda la transacción y devolvemos false
            $sql = " ROLLBACK; ";
            mysql_query($sql, $conecta);
            return false;
        }

    } catch (Exception $e) {
        
        //En caso de que haya algún error, deshacemos toda la transacción y devolvemos false
        $sql = " ROLLBACK; ";
        mysql_query($sql, $conecta);
        return false;
        
    }
}

function insertarConversacion($conversacion){
    
    session_start();
    
    try {
        
        $conecta = conectarMensajes();

        // Tenemos que crear una transacción para que en caso de dar error alguna de las queries, se desaga todo el bloque.
        // Empezamos la transacción
        $sql = "START TRANSACTION; ";
        mysql_query($sql, $conecta);

        //insertamos mensaje dentro de una conversación 
        $sql = " INSERT INTO cuerposMensajes (idMensaje, idUsuarioOrigen, idUsuarioDestino, cuerpo) VALUES (".$conversacion['mid'].",".$conversacion['uidO'].",".$conversacion['uidD'].",'".$conversacion['cuerpo']."');";
        mysql_query($sql, $conecta);

        //Actualizamos la tabla mensajes con los nuevos valores de mensajes no leídos
        $sql = " UPDATE mensajes 
                SET mensajesSinLeerOrigen = IF (idUsuarioOrigen = ".$conversacion['uidO'].", mensajesSinLeerOrigen, (SELECT count(*) as valor FROM cuerposMensajes 
                WHERE idUsuarioDestino != ".$conversacion['uidO']." and leido = 1 and idMensaje = ".$conversacion['mid'].")),             
                    mensajesSinLeerDestino = IF (idUsuarioDestino = ".$conversacion['uidO'].", mensajesSinLeerDestino, (SELECT count(*) as valor FROM cuerposMensajes 
                WHERE idUsuarioDestino != ".$conversacion['uidO']." and leido = 1 and idMensaje = ".$conversacion['mid'].")),
                    totalMensajes = (SELECT count(*) FROM cuerposMensajes WHERE idMensaje = ".$conversacion['mid']."),
                    fechaModificacion = NOW()
                WHERE idMensaje = ".$conversacion['mid'].";";
        $resultado = mysql_query($sql, $conecta);

        //Cerramos la transacción
        $sql = " COMMIT; ";

        if ($resultado = mysql_query($sql, $conecta)) {
            return true;
        } else {
            $sql = " ROLLBACK; ";
            mysql_query($sql, $conecta);
            return false;
        }   
        
    } catch (Exception $e) {
        
        // si falla algo, deshacemos todo el bloque de la transacción.
        $sql = " ROLLBACK; ";
        mysql_query($sql, $conecta);
        return false;
    }
}

function insertarMensaje($mensaje) {
    
    try {
        //insertamos mensaje nuevo
        $sql = "INSERT INTO mensajes (idUsuarioOrigen, idUsuarioDestino, asunto)"
              ." VALUES (".$mensaje['uidO'].",".$mensaje['uidD'].",'".$mensaje['asunto']."')";

        mysql_query($sql, conectarMensajes());
        return mysql_insert_id();
    } catch (Excetion $e){
        echo 'ERROR: '.$e;
    }
    
}

function mensajesSinLeer($uid) {
    
    try {
        session_start();
        $sql = "SELECT sum(IF (idUsuarioOrigen = ".$uid.", mensajesSinLeerOrigen, IF(idUsuarioDestino = ".$uid.", mensajesSinLeerDestino, null))) as cantidad "
                . "FROM mensajes "
                . "INNER JOIN usuarios as usuariosOrigen ON mensajes.idUsuarioOrigen = usuariosOrigen.idUsuario "
                . "INNER JOIN usuarios as usuariosDestino ON mensajes.idUsuarioDestino = usuariosDestino.idUsuario "
                . "WHERE usuariosOrigen.activo = 'SI' and usuariosDestino.activo = 'SI'" ;
        $result = mysql_query($sql, conectarUsuarios());
        $cantidad = mysql_fetch_array($result);
        return $cantidad['cantidad'];
    } catch (Exception $e) {
        echo 'ERROR: '.$e;
    }
}

function notificacionesNuevas($uid) {
    try {
        session_start();
        $sql = "SELECT sum(nueva) as cantidad FROM notificaciones where idUsuarioDestino = ".$uid;
        $result = mysql_query($sql, conectarUsuarios());
        $cantidad = mysql_fetch_array($result);
        return $cantidad['cantidad'];
    } catch (Exception $e) {
        echo 'ERROR: '.$e;
    }
}